// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db = cloud.database()
const _ = db.command
const $ = db.command.aggregate

/**
 * 获取帖子列表
 * @param {Object} event - 请求参数
 * @param {string} event.category - 分类（可选）
 * @param {number} event.pageNum - 页码，从0开始
 * @param {number} event.pageSize - 每页数量
 * @param {string} event.sortBy - 排序方式：new(最新)、hot(最热)
 * @param {string} event.keyword - 搜索关键词（可选）
 */
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const openid = wxContext.OPENID
  
  // 解构参数
  const { category, pageNum = 0, pageSize = 10, sortBy = 'new', keyword } = event
  
  try {
    // 构建查询条件
    const condition = {}
    
    // 如果有分类，添加分类条件
    if (category && category !== 'all') {
      condition.category = category
    }
    
    // 如果有关键词，添加搜索条件
    if (keyword) {
      condition.title = db.RegExp({
        regexp: keyword,
        options: 'i', // 不区分大小写
      })
    }
    
    // 构建排序条件
    let sortCondition = {}
    if (sortBy === 'hot') {
      sortCondition = { likes: -1, comments: -1, createTime: -1 }
    } else {
      sortCondition = { createTime: -1 }
    }
    
    // 查询帖子总数
    const countResult = await db.collection('forum_posts')
      .where(condition)
      .count()
    
    const total = countResult.total
    
    // 查询帖子列表
    const postListResult = await db.collection('forum_posts')
      .aggregate()
      .match(condition)
      .sort(sortCondition)
      .skip(pageNum * pageSize)
      .limit(pageSize)
      .lookup({
        from: 'users',
        localField: 'authorId',
        foreignField: '_openid',
        as: 'authorInfo'
      })
      .addFields({
        // 处理作者信息
        author: $.arrayElemAt(['$authorInfo', 0]),
        // 检查当前用户是否点赞
        isLiked: $.in([openid, $.ifNull('$likedBy', [])])
      })
      .project({
        _id: 1,
        title: 1,
        content: 1,
        images: 1,
        category: 1,
        categoryName: 1,
        createTime: 1,
        updateTime: 1,
        likes: 1,
        comments: 1,
        isLiked: 1,
        author: {
          nickName: 1,
          avatarUrl: 1
        }
      })
      .end()
    
    return {
      success: true,
      posts: postListResult.list,
      total,
      pageNum,
      pageSize
    }
  } catch (err) {
    console.error('获取帖子列表失败', err)
    return {
      success: false,
      error: err
    }
  }
}